package com.math.aistudykbr.controller;

import com.math.aistudykbr.pojo.entity.AnalysisResult;
import com.math.aistudykbr.pojo.entity.AsyncTask;
import com.math.aistudykbr.service.AsyncTaskService;
import com.math.aistudykbr.utils.Result;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.io.FilenameUtils;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import java.util.Arrays;

/**
 * 文件分析控制器：处理文件上传和分析结果查询的REST接口
 */
@RestController
@Slf4j
@RequiredArgsConstructor
@RequestMapping("/api/file-analysis")
public class FileAnalysisController {

    private final AsyncTaskService asyncTaskService;

    /**
     * 处理文件上传请求
     * @param file 上传的文件（Multipart格式）
     * @return 包含异步任务信息的统一响应结果
     * @throws IllegalArgumentException 当上传空文件时抛出
     * @throws UnsupportedOperationException 当文件格式不支持时抛出
     */
    @PostMapping(value = "/upload")
    public Result<AsyncTask> handleFileUpload(@RequestParam("file") MultipartFile file) {
        // 校验文件是否为空
        if (file.isEmpty()) {
            throw new IllegalArgumentException("文件不能为空");
        }

        // 校验文件格式（允许ppt/pptx/pdf/doc/docx）
        if (!Arrays.asList("ppt", "pptx", "pdf", "doc", "docx")
                .contains(FilenameUtils.getExtension(file.getOriginalFilename()))) {
            throw new UnsupportedOperationException("不支持的文件格式");
        }

        // 创建并执行异步分析任务
        AsyncTask asyncTask = asyncTaskService.createAsyncTask(file);
        asyncTaskService.executeAnalysis(asyncTask.getId());

        log.info("文件上传成功：file={}", file.getOriginalFilename());

        return Result.success(200, "文件上传成功", asyncTask);
    }

    /**
     * 获取文件分析结果
     * @param taskId 异步任务ID
     * @return 分析结果数据
     */
    @GetMapping("/result")
    public AnalysisResult getAnalysisResult(@RequestParam("taskId") String taskId) {
        log.info("获取文件分析结果：taskId={}", taskId);
        return asyncTaskService.getAnalysisResult(taskId);
    }
}